package com.xbongbong.pay.platform.wechatpay.pojo.response;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 * 退款结果通知
 * @author 魏荣杰
 * @date 2021/2/2 17:15
 * @since
 * @version
 */
@Setter
@Getter
public class WeChatRefundNoticeResponse extends WeChatBaseResponse{
    private static final long serialVersionUID = -557656814494747845L;

    /**
     * 通知的唯一ID
     * 示例值：EV-2018022511223320873
     */
    @NotNull
    @Size(min = 1, max = 36)
    private String id;
    /**
     * 通知创建的时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日13点29分35秒。
     * 示例值：2018-06-08T10:34:56+08:00
     */
    @NotNull
    @Size(min = 1, max = 32)
    @JSONField(name = "create_time")
    private String createTime;
    /**
     * 通知的类型：
     * REFUND.SUCCESS：退款成功通知
     * REFUND.ABNORMAL：退款异常通知
     * REFUND.CLOSED：退款关闭通知
     * 示例值：REFUND.SUCCESS
     */
    @NotNull
    @Size(min = 1, max = 32)
    @JSONField(name = "event_type")
    private String eventType;
    /**
     * 通知简要说明
     * 示例值：退款成功
     */
    @NotNull
    @Size(min = 1, max = 16)
    private String summary;
    /**
     * 通知的资源数据类型，支付成功通知为encrypt-resource
     * 示例值：encrypt-resource
     */
    @NotNull
    @Size(min = 1, max = 32)
    @JSONField(name = "resource_type")
    private String resourceType;

    /**
     * 通知资源数据
     * json格式，见示例
     */
    @NotNull
    @Valid
    private Resource resource;

    @Setter
    @Getter
    public static class Resource {
        /**
         * 对开启结果数据进行加密的加密算法，目前只支持AEAD_AES_256_GCM
         * 示例值：AEAD_AES_256_GCM
         */
        @NotNull
        @Size(min = 1, max = 32)
        private String algorithm;
        /**
         * 加密前的对象类型，退款通知的类型为refund
         * 示例值：refund
         */
        @NotNull
        @Size(min = 1, max = 32)
        @JSONField(name = "original_type")
        private String originalType;
        /**
         * Base64编码后的开启/停用结果数据密文
         * 示例值：fdasfsadsadsalkja484w
         */
        @NotNull
        @Size(min = 1, max = 1048576)
        private String ciphertext;
        /**
         * 附加数据
         * 示例值：fdasdsadsafcsflkja484w
         */
        @Size(min = 1, max = 16)
        @JSONField(name = "associated_data")
        private String associatedData;
        /**
         * 加密使用的随机串
         * 示例值：fdasfjihihihlkja484w
         */
        @NotNull
        @Size(min = 1, max = 16)
        private String nonce;
    }
}
